import os
import json
import llmShift as llm
from docx import Document

# 打开一个已存在的docx文件
content = ''
doc = Document("3.毕业论文模板.docx")
for para in doc.paragraphs:
    content += para.text


def directory(model='moonshot-v1-auto', query=''):
    title = query
    directory_path = f"thesisDirectory/{title}"
    with open(directory_path + f'/{title}_parse.json', "r", encoding="utf-8") as file:
        jsonfile = json.load(file)
    query += '；论文模板：' + content + "；项目结构及代码：" + str(jsonfile)
    prompt = [
        {
            "role": "system",
            "content": "你是人工智能助手，你更擅长中文和英文的对话。你会为用户提供安全，有帮助，准确的回答。同时，你会拒绝一切涉及恐怖主义，种族歧视，黄色暴力等问题的回答。",
        },
        {
            "role": "system",
            "content": "标题：" + query,
        },
        {
            "role": "user",
            "content": f"""
                  - Role: 论文写作专家和代码分析工程师
                  - Background: 用户需要撰写一篇论文，要求根据论文模板、项目结构和代码来生成一份目录，并附带每个章节的注意事项和需要画图的种类（必须要有系统流程图，系统架构图，系统模块功能结构图，E-R图这四种图，其他随意）。这表明用户可能正在从事计算机科学或相关领域的研究工作，需要将代码与理论相结合，以满足学术写作的规范。
                  - Profile: 你是一位在学术写作和代码分析方面拥有丰富经验的专家，精通各种论文模板和格式要求，能够将代码与理论知识有机结合，帮助用户高效地完成高质量的论文。
                  - Skills: 你具备深入的学术写作能力、代码分析能力、项目结构理解能力以及对不同论文模板的熟悉程度，能够准确把握论文的逻辑结构和内容要求。
                  - Goals: 根据用户提供的论文模板、项目结构和代码，生成一份清晰、规范的论文目录，并为每个章节提供详细的注意事项，同时为在需要画图的章节提供图的种类（流程图，架构图，E-R图等），以确保论文内容的逻辑性和完整性。
                  - Constraints: 目录必须符合学术写作的规范，部分章节内容必须基于代码进行撰写（如 相关技术,系统架构，核心技术），且每个章节的注意事项应具体、实用，能够指导用户完成高质量的论文。
                  - OutputFormat: 以JSON格式输出论文目录，附带每个章节的注意事项。
                  - Workflow:
                    1. 分析论文模板，明确论文的结构和格式要求。
                    2. 根据项目结构和代码，确定论文的主要章节和内容框架。
                    3. 为每个章节撰写详细的注意事项，确保内容的逻辑性和完整性。
                  - Examples: 
                    {{
                        "title": "基于GraphRAG的论文爬取与问答系统",
                        "chapters": [
                            {{
                                "title": "第一章 概述",
                                "sections": [
                                    {{
                                        "title": "1.1 项目开发背景",
                                        "attention": "重点阐述传统RAG模型的局限性，说明GraphRAG技术在处理复杂关系和多维度信息方面的优势，结合学术论文阅读的实际需求，分析系统开发的必要性。"
                                    }},
                                    {{
                                        "title": "1.2 项目开发目标",
                                        "attention": "明确系统目标：1)实现arxiv论文的自动化爬取与存储；2)构建知识图谱；3)提供智能问答服务。需具体说明各模块的功能预期和技术指标。"
                                    }},
                                    {{
                                        "title": "1.3 核心技术介绍",
                                        "attention": "分点说明：1)GraphRAG技术原理；2)实体与关系抽取方法；3)知识图谱构建流程；4)问答系统实现机制。需引用相关文献支持技术选型。"
                                    }}
                                ]
                            }},
                            {{
                                "title": "第二章 需求分析",
                                "sections": [
                                    {{
                                        "title": "2.1 GraphRAG概况",
                                        "attention": "对比传统RAG与GraphRAG的差异，重点说明知识图谱在增强语义关联方面的作用，需配合架构图说明技术路线。"
                                    }},
                                    {{
                                        "title": "2.2 基于GraphRAG的论文爬取与问答系统的分析",
                                        "subsections": [
                                            {{
                                                "title": "2.2.1 论文检索模块",
                                                "attention": "详细说明6项子功能：爬取、下载检查、AI总结、翻译、邮件提醒、模型切换。需用流程图展示模块交互逻辑。"
                                            }},
                                            {{
                                                "title": "2.2.2 GraphRAG问答模块",
                                                "attention": "分析3项核心功能：实体关系抽取、知识图谱构建、智能问答。需说明与Neo4j的集成方式。"
                                            }}
                                        ]
                                    }},
                                    {{
                                        "title": "2.3 系统架构图分析",
                                        "attention": "绘制并说明三层架构：1)前端Vue3+ElementPlus；2)后端Python+Flask；3)数据层MySQL+Neo4j。突出双数据库协同机制。",
                                        "draw": "系统架构图"
                                    }},
                                    {{
                                        "title": "2.4 本章小结",
                                        "attention": "总结需求分析成果，强调系统在解决学术论文信息过载问题上的创新点。"
                                    }}
                                ]
                            }},
                            {{
                                "title": "第三章 关键技术",
                                "sections": [
                                    {{
                                        "title": "3.1 提示词工程",
                                        "attention": "详细解析12部分提示词模板（Role/Background/OutputFormat等），展示论文总结和实体抽取的实际prompt示例。需说明温度参数对生成效果的影响。"
                                    }},
                                    {{
                                        "title": "3.2 知识图谱构建",
                                        "subsections": [
                                            {{
                                                "title": "3.2.1 实体关系抽取",
                                                "attention": "分析JSON输出格式设计，说明多模型切换策略（星火/通义千问等）。需附代码片段展示llmShift.version_choose调用方式。"
                                            }},
                                            {{
                                                "title": "3.2.2 Neo4j图数据库操作",
                                                "attention": "详解Cypher查询语句：1)节点创建MATCH-CREATE；2)关系建立MERGE。需提供实体消歧的具体实现方案。"
                                            }}
                                        ]
                                    }},
                                    {{
                                        "title": "3.3 本章小结",
                                        "attention": "总结技术亮点：1)动态prompt生成；2)混合模型调度；3)图数据库优化查询。"
                                    }}
                                ]
                            }},
                            {{
                                "title": "第四章 系统实现",
                                "sections": [
                                    {{
                                        "title": "4.1 核心模块实现",
                                        "subsections": [
                                            {{
                                                "title": "4.1.1 论文爬取模块",
                                                "attention": "重点说明：1)arxiv API调用限流处理；2)PDF完整性校验算法；3)邮件附件生成逻辑。需标注关键代码位置（如search.py的L45-78）。"
                                            }},
                                            {{
                                                "title": "4.1.2 问答服务模块",
                                                "attention": "解析：1)实体提取prompt模板；2)路径查询Cypher语句生成；3)答案合成策略。展示问答效果截图。"
                                            }}
                                        ]
                                    }},
                                    {{
                                        "title": "4.2 系统界面展示",
                                        "attention": "通过5个典型界面截图说明：1)论文搜索页；2)知识图谱可视化；3)问答交互页。分析Element Plus组件应用情况。",
                                        "draw": "界面效果图"
                                    }},
                                    {{
                                        "title": "4.3 本章小结",
                                        "attention": "总结实现难点：1)长文本分块处理；2)多格式文件生成；3)跨数据库事务管理。"
                                    }}
                                ]
                            }},
                            {{
                                "title": "第五章 系统测试",
                                "sections": [
                                    {{
                                        "title": "5.1 测试方案",
                                        "attention": "设计：1)JMeter压力测试（并发用户≥50）；2)精确率/召回率评估（F1≥0.85）；3)Neo4j查询响应时间（<500ms）。需说明测试环境配置。"
                                    }},
                                    {{
                                        "title": "5.2 测试结果",
                                        "attention": "用表格呈现：1)论文爬取成功率；2)实体抽取准确率；3)问答响应时间。分析典型错误案例（如代词消解失败）。",
                                        "draw": "性能测试结果表"
                                    }},
                                    {{
                                        "title": "5.3 本章小结",
                                        "attention": "总结系统优势：1)多模型支持灵活性；2)学术领域适配性；3)邮件集成便捷性。"
                                    }}
                                ]
                            }},
                            {{
                                "title": "第六章 总结与展望",
                                "sections": [
                                    {{
                                        "title": "6.1 工作总结",
                                        "attention": "归纳三大成果：1)实现论文处理全流程自动化；2)构建领域知识图谱；3)验证GraphRAG技术可行性。"
                                    }},
                                    {{
                                        "title": "6.2 研究展望",
                                        "attention": "提出：1)多模态图谱扩展；2)增量式图谱更新；3)联邦学习架构。每个方向需给出具体技术路线。"
                                    }}
                                ]
                            }}
                        ],
                        "appendix": [
                            {{
                                "title": "核心代码清单",
                                "content": "1) arxiv_search.py的论文爬取逻辑；2) neo4j_operator.py的Cypher语句生成；3) QAPage.vue的问答交互实现。需添加代码功能注释。"
                            }},
                            {{
                                "title": "测试数据集",
                                "content": "包含：1)100篇测试论文PDF；2)人工标注的实体关系样本；3)典型问答测试用例。说明数据采集和标注规范。"
                            }}
                        ]
                    }}
                  """
        },
    ]
    dir = llm.version_choose(model, temp=0.2, question=prompt).replace("```", "").replace("json", "")
    print(dir)
    json_data = json.loads(dir)
    with open(f"thesisDirectory/{title}/{title}_directory.json", "w", encoding="utf-8") as file:
        json.dump(json_data, file, ensure_ascii=False, indent=4)
    print("JSON文件已保存为data.json")
    return directory_path


directory('moonshot-v1-128k', query='基于YOLOv5的羽毛球落点判断算法的设计与实现')
